assert関数は、プログラムの不良(バグ)摘出を支援します。引数の値が0の場合は、標準エラー出力にエラーメッセージを表示し、さらにabort関数を呼び出すことによって、プログラムを終了させます。なお、assert関数はマクロとして定義されています。
#include <assert.h>
void assert(int exp);
expは、値をチェックしたい変数を指定します。
assert関数は、NDEBUGマクロが定義されていた場合は何もしません。従って、次の例題の2行目のコメントを外すと、assert関数は無効になります。
プログラム 例
#include <stdio.h>
/* #define NDEBUG */
#include <assert.h>
int main(void)
{
int loop_cnt;
int in_data;
for (loop_cnt = 1; loop_cnt <= 5; ++loop_cnt) {
printf('0以外の整数の値を入力してください ==> ');
scanf('%d', &in_data);
/* in_dataの値が0の場合、異常終了 */
assert(in_data);
}
return 0;
}
例の実行結果
$ ./assert.exe 0以外の整数の値を入力してください ==> 1 0以外の整数の値を入力してください ==> 2 0以外の整数の値を入力してください ==> 3 0以外の整数の値を入力してください ==> 0 assert.exe: assert.c:15: main: Assertion `in_data' failed. アボートしました $